『Structured Design』 による凝集度の分類
『Structured Design』による凝集度の分類
Wikipediaによると常に優劣が付くものでもないらしい
凝集度は必ずしも上記の順に高いとか低いと言えるものではない。ref wikipedia
これらはどういうつもりでの分類なのだろうか #??
任意のプログラムは常にいずれかに該当するというものなのか重複はありうるのか
そもそも分類自体がMECEであるのか
「凝集度」という概念自体が重要なのは納得感があるものの、この分類については割と違和感があったりするmrsekut.icon
とは言え言語化できるほど構造化できていない
原典の『Structured Design』を早く読めよという話ではある
数ページなのですぐ読めるはずだが面倒
分類の性質的に、「あるある」を集めて分類したもの、というのはあるだろう
理想的な、論理的な話をしているのではなく、
具体的なコードで良く書かれがちなパターンを分類してみました!それには優劣があったりなかったりすることがわかりますた!
という話だろう
論理的に考えれば、だいたい全て機能的凝集に属すると思う
論理的に設計する際はメンタルモデルなどが先んじるはずで、その様に思考すれば偶発的凝集なんて現れるはずがない
ここでの分類は、そうではなく、コードが成長する中で徐々におかしくなっていき、こういったパターンに陥りがち、みたいな感じなのではないか
機能的凝集
理想的な凝集
中程度
通信的凝集
順番の関係ない、特定のデータを扱う処理の集まり
逐次的凝集
特定のデータを扱う処理の集まりで、かつ順番に関係がある部分を集めたmodule
手順的凝集
特定の時間でかつ、実行順序に意味のある複数の処理がまとまっている
時間的凝集
呼ばれるタイミングが同じものを集める
論理的凝集
論理的に似ている複数の処理が関数にまとまっている
偶発的凝集
最低
関連性がない処理が1つの関数内に実装されている
オブジェクト指向のその前に-凝集度と結合度/Coheision-Coupling - Speaker Deck
具体例多い